
// 关键字
// never
// any
// unknown
// void 
// interface 
// enum 
// type 
// private 
// protected
// public 
// static (es6 也有) 
// extends : 类型约束  类 : 继承  泛型 : 类型约束
// keyof : 索引类型 对象的key
// as : 作为xxx 


// 高级类型 
// 索引类型 : keyof
// 约束类型 : extends
// typeof : typeof a === 'string'

interface IPersonP{
  name:string,
  age:number
}

const me1 : IPersonP = {name:'zhang',age:16}

// type AxiosType = typeof axios 
type P = typeof me1 // typeof + 值 : 代表的是类型 通过typeof 获取毛哥实例的类型
let p : P = {name:'123',age:20}

// 遍历类型 : 循环 

type TypeOfNumber<T,U> = {
  [key in keyof T] : U
}

const obj2 : TypeOfNumber<IPersonP,boolean> = {
  name :true,
  age : false
}

// extends  : <类型A extends 类型B> : 类型B约束了类型A
// keyof : 类型A = keyof 类型B :  类型A 索引了 类型B
// typeof : 类型A = typeof 值 : 类型A获取了值B的类型
// in  : 只能在[]里面用  [自定义的变量 in keyof 泛型] : 类型B  : 遍历泛型中的每一个key赋值成类型B
